There are a variety of different applications that can use programmable integrated circuits (ICs). Programmable ICs include programmable hardware resources (e.g., programmable logic circuits and/or programmable routing resources) that can be programmed to implement various circuits. One type of programmable IC, referred to as a field programmable gate array (FPGA), typically includes an array of programmable tiles. These programmable tiles comprise various types of logic blocks, which can include, for example, input/output blocks (IOBs), configurable logic blocks (CLBs), dedicated random access memory blocks (BRAM), multipliers, digital signal processing blocks (DSPs), processors, clock managers, delay locked loops (DLLs), bus or network interfaces such as Peripheral Component Interconnect Express (PCIe) and Ethernet, and so forth.
Some ICs include enough components and functionality to effectively serve as a computer system on a single IC chip. ICs with such functionality are sometimes referred to as a system on a chip (SOC). An SOC can include one or more processor circuits that execute software instructions in order to carry out different functions and/or include programmable hardware resources that can be programmed to form various circuit designs. Upon startup (e.g., hard-power on or hard reset), the SOC can first execute a boot read only memory (ROM) code that configures the SOC to retrieve and load a boot image. The boot image can specify how peripheral functional blocks of the SOC are configured, configure programmable resources to implement a hardware portion of a system design, setup and run the operating system (OS) to implement a software portion of the system design, and/or perform other boot-related functions. The hardware portion specifies a hardware circuit arrangement included in the system design. The software portion of the system design specifies a set of instructions that are executed by a processor of the SOC during operation of the system. Often, the boot image for an SOC can be retrieved and loaded from an external device coupled to an SOC.